<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!--  和相同的二元子数组
  给你一个二元数组 nums ，和一个整数 goal ，请你统计并返回有多少个和为 goal 的 非空 子数组。
  子数组 是数组的一段连续部分。
  示例 1：
  输入：nums = [1,0,1,0,1], goal = 2
  输出：4
  解释：
  有 4 个满足题目要求的子数组：[1,0,1]、[1,0,1,0]、[0,1,0,1]、[1,0,1]
 -->
</head>
<body>
  <script>
    var numSubarraysWithSum = function(nums, goal) {
    let sum = 0;
    const cnt = new Map();
    let ret = 0;
    for (const num of nums) {
        cnt.set(sum, (cnt.get(sum) || 0) + 1);
        sum += num;
        ret += cnt.get(sum - goal) || 0;
    }
    return ret;
};
console.log(numSubarraysWithSum([1,0,1,0,1],2));
  </script>
</body>
</html>